import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'

Vue.use(VueRouter)

// 引入路由
import routes from './routers'

// 在使用编程式路由导航时，多次点击参数一样的路由，在页面控制台会出现Uncaught (in promise) NavigationDuplicated: 的错误，可以重写push|replace方法来避免出现。如果不写，也不会影响功能的使用
// 重写 push|replace 
// 第一个参数：传递哪些参数，第二个：成功回调，第三个：失败的回调
// call||apply 区别
// 同：都可以调用函数一次，都可以修改函数的上下文。
// 不同：call 传递参数用，隔开；apply方法执行 传递数组。
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;

VueRouter.prototype.push = function(location,resole,reject){
    if(resole && reject){
        originPush.call(this,location,resole,reject)
    }else{
        originPush.call(this,location,()=>{},()=>{})
    }
}

VueRouter.prototype.push = function(location,resole,reject){
    if(resole && reject){
        originReplace.call(this,location,resole,reject)
    }else{
        originReplace.call(this,location,()=>{},()=>{})
    }
}

// 创建一个路由
let router =  new VueRouter({
    routes,
    // 跳转路由后的滚动行为
    scrollBehavior(to,from,scrollBehavior){
    // 这里的x，y 表示跳转后距离左上角的高度
        return {y:0}
    }
})

// 全局守卫，前置守卫
router.beforeEach(async (to, from, next) => {
    let token = store.state.user.token; //获取token
    let name = store.state.user.userInfo.name; //获取用户名
    next();
    // 如果登录
    if (token) {
      // 再去login 不可以
      if (to.path == "/login" || to.path == "/register") {
        next("/");
      } else {
        // 去其他地方 先判断有没有用户名 没有的话派发
        if (name) {
          next();
        } else {
          // 用户信息
          try {
            await store.dispatch("user/getUserInfo");
            next();
          } catch (error) {
            // 如果token过期 清空
            await store.dispatch("user/userLogout");
            next("/");
          }
        }
      }
    }
    // 没登录
    else {
      let toPath = to.path;
      if (
        toPath.indexOf("/trade") != -1 ||
        toPath.indexOf("/pay") != -1 ||
        toPath.indexOf("/center") != -1
      ) {
        // 保存登录之前点的地方 放到query里面 然后登录组件里判断 有的话就跳回之前 没有就跳home
        // console.log(toPath); //center
        alert("请先登录或注册");
        next("/login?redirect=" + toPath);
      } else {
        next();
      }
    }
  });



export default router

